package com.fzdy.product.base.dao.impl;

import com.fzdy.product.base.dao.BaseNativeSql;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
import java.util.List;

public class BaseNativeSqlRepository implements BaseNativeSql {


    @PersistenceUnit
    protected EntityManagerFactory emf;

    /**
     * 查询多个属性
     * 返回List<Object[]>数组形式的，数组中内容按照查询字段先后
     *
     * @param sql
     * @return
     * @author savingyu
     * @author 2018年8月30日
     */
    public List<Object[]> sqlArrayList(String sql) {
        EntityManager em = emf.createEntityManager();
        Query query = em.createNamedQuery(sql);
        List<Object[]> list = query.getResultList();
        em.close();
        return list;
    }

    /**
     * 查询多个属性
     * 返回List<Object>对象形式的List，Object为Class格式对象
     *
     * @param sql
     * @param obj
     * @return
     * @author savingyu
     * @author 2018年8月30日
     */
    public List sqlObjectList(String sql, Object obj) {
        EntityManager em = emf.createEntityManager();
        Query query = em.createNamedQuery(sql, obj.getClass());
        List list = query.getResultList();
        em.close();
        return list;
    }

    /**
     * 查询单个属性
     *
     * @param sql
     * @return
     * @author savingyu
     * @author 2018年8月30日
     */
    public List sqlSingleList(String sql) {
        EntityManager em = emf.createEntityManager();
        Query query = em.createNamedQuery(sql);
        List list = query.getResultList();
        em.close();
        return list;
    }

    public void createTable(String tname, String pname) {
        EntityManager em = emf.createEntityManager();
        String sql = "call p_createtable_" + pname + "(:inParam1);";
        Query query = em.createNativeQuery(sql).setParameter("inParam1", tname);
        query.getResultList();

        em.close();
    }
}
